/**
 * Return an array of arrays of size *returnSize.
 * The sizes of the arrays are returned as *returnColumnSizes array.
 * Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().
 */
int** mergeSimilarItems(int** items1, int items1Size, int* items1ColSize, int** items2, int items2Size, int* items2ColSize, int* returnSize, int** returnColumnSizes) {
    int hash[1001];
    memset(hash, 0, 4004);
    int** ans = (int**)malloc(sizeof(int*) * 1001);
    for(int i = 0; i < 1001; i++){
        ans[i] = (int*)malloc(sizeof(int) * 2);
    }
    *returnSize = 0;

    for(int i = 0; i < items1Size; i++){
        hash[items1[i][0]] += items1[i][1];
    }
    for(int i = 0; i < items2Size; i++){
        hash[items2[i][0]] += items2[i][1];
    }
    int j = 0;
    for(int i = 0; i < 1001; i++){
        if(hash[i] != 0){
            ans[j][0] = i; 
            ans[j++][1] = hash[i];
        }
    }
    *returnSize = j;
    *returnColumnSizes = (int *)malloc(sizeof(int) * (*returnSize));
    for (int i = 0; i < (*returnSize); i++) {
        (*returnColumnSizes)[i] = 2;
    }
    return ans;
}

/*给你两个二维整数数组 items1 和 items2 ，表示两个物品集合。每个数组 items 有以下特质：

items[i] = [valuei, weighti] 其中 valuei 表示第 i 件物品的价值，weighti 表示第 i 件物品的重量。
items 中每件物品的价值都是唯一的 。
请你返回一个二维数组 ret，其中 ret[i] = [valuei, weighti]， weighti 是所有价值为 valuei 物品的重量之和。

注意：ret 应该按价值升序排序后返回。*/